﻿-------------------------------------------------------------------------------
--        Ускорение скроллинга колёсиком мышки. © SimSU
-------------------------------------------------------------------------------

---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Common_MouseWheel.cfg
return{
  DownKey="MsWheelDown"; --DownPrior=50; -- Ускорение скроллинга колёсиком мышки - вниз.
  UpKey  ="MsWheelUp"; --UpPrior=50; -- Ускорение скроллинга колёсиком мышки - вверх.

  Delay = 0.1; -- Максимальное время в секундах перемещения на следующий элемент при автоматической прокрутке.
  ScaleUp = 2.0; -- Коэффициент ускорения, должен быть больше 1.
  ScaleDown = 1.2; -- Коэффициент замедления, должен быть больше 1.
}
-- Конец файла Profile\SimSU\Common_MouseWheel.cfg
end

_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\SimSU\Common_MouseWheelRussian.lng
return{
  DownDescr="Ускорение скроллинга колёсиком мышки - вниз. © SimSU";
  UpDescr="Ускорение скроллинга колёсиком мышки - вверх. © SimSU";
}
-- Конец файла Profile\SimSU\Common_MouseWheelRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Common_MouseWheelEnglish.lng
return{
  DownDescr="Acceleration of scrolling by a mouse wheel - downwards. © SimSU";
  UpDescr="Acceleration of scrolling by a mouse wheel - upwards. © SimSU";
}
-- End of file Profile\SimSU\Common_MouseWheelEnglish.lng
end end

local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_MouseWheel"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Common_MouseWheel.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Common_MouseWheel.cfg") or Settings)()

local SimSU=SimSU or {}
-------------------------------------------------------------------------------
local Delay= Delay or 0.1
local ScaleUp= ScaleUp and ScaleUp>1 and ScaleUp or 2.0
local ScaleDown= ScaleDown and ScaleDown>1 and ScaleDown or 1.2

function SimSU.Common_Scroll() -- Функция прокрутки. © SimSU
  local Pause=Delay
  local VK
  local mm=mmode(1,0)
  while Pause<=Delay do
    Keys("Akey")
    VK=mf.waitkey(Pause*1000+1)
    if VK==mf.akey(1,1) then
      Pause=Pause/ScaleUp
    elseif VK=="" then
      Pause=Pause*ScaleDown
    else
      Keys(VK)
      break
    end
  end
  mmode(1,mm)
end;
-------------------------------------------------------------------------------
if not Macro then return {Scroll=SimSU.Scroll} end

local ok, mod = pcall(require,"SimSU.Common_MouseWheel"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------

Macro{area="Common"; key=S.DownKey; priority=S.DownPrior; description=M.DownDescr;
  action=SimSU.Common_Scroll;
}
Macro{area="Common"; key=S.UpKey; priority=S.UpPrior; description=M.UpDescr;
  action=SimSU.Common_Scroll;
}
